/*
 * 文件名： AuthActivity.java
 * 描    述：三方登录基类
 * 时    间：2015-3-25 下午5:47:21
 * 版    本：V1.0
 */
package com.miguo.activity.auth;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

import com.miguo.activity.base.BaseActivity;
import com.miguo.app.AppContext;
import com.miguo.bean.AuthLoginBean;
import com.miguo.framework.authorize.BASE64;
import com.miguo.framework.uri.UriError;
import com.miguo.framework.uri.UriException;
import com.miguo.framework.uri.UriListener;

public abstract class AuthActivity extends BaseActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void parserUri() {
        Intent intent = this.getIntent();
        Uri uri = intent.getData();

        Uri uri_parse = Uri.parse(AppContext.REDIRECT_URI);
        if (uri != null && uri.getScheme().equals(uri_parse.getScheme())
                && uri.getHost().equals(uri_parse.getHost())
                && uri.getPort() == uri_parse.getPort()
                && uri.getPath().equals(uri_parse.getPath())) {
            String errorStr = uri.getQueryParameter("error");
            UriListener<AuthLoginBean> listener = getAuthorizeListener();

            if (errorStr == null) {
                // 成功
                // String ret = uri.getFragment();

                String data = uri.getQueryParameter("data");
                String Login_data = new String(BASE64.decode(data));
                AuthLoginBean authLogin = null;
                try {
                    authLogin = new AuthLoginBean(Login_data);
                } catch (UriException e) {
                    e.printStackTrace();
                    listener.onException(e);
                }

                listener.onComplete(authLogin);

                // System.out.println("token:"+Login_data);

            } else {
                // 失败
                String errorDes = uri.getQueryParameter("error_description");
                UriError error = new UriError();
                error.setError(errorStr);
                error.setErrorDescription(errorDes);
                listener.onError(error);
            }
        }
    }

    protected abstract UriListener<AuthLoginBean> getAuthorizeListener();

}
